package org.deng.learn.designpattern.composite;

import java.util.LinkedList;
import java.util.List;

/**
 * @Author DengLibin
 * @Date 19-5-5
 * @Time 上午11:18
 * @Desc　树形结构组合
 */
public class Composite implements Component{
    private String name;
    private List<Component> children = new LinkedList<>(); //子节点可以是Leaf或Composite

    public Composite(String name){
        this. name = name;
    }

    /**
     * 添加子节点（可能是单个节点也可能是树）
     * @param component
     */
    void addChild(Component component){
        children.add(component);
    }

    /**
     * 移除子节点
     * @param component
     */
    void removeChild(Component component){
        children.remove(component);
    }

    /**
     * 实现接口方法
     */
    @Override
    public void process() {
        //１.当前节点process

        //2. 子节点process(子节点可以是Leaf或Composite,如果是Composite则会进行递归调用)
        for(Component component : children){
            component.process();
        }
    }
}
